﻿
函数 整型 入口函数()
	控制台置中文编码()
	如果 FD_加载DLL("FiddlerCWrap_Extend.dll") == 假
		消息框("加载DLL 失败")
		返回 0
	FD_应用 app
	如果 app.初始化() == 假
		消息框("初始化 失败")
		返回 0
		
	如果 app.根证书_安装默认证书() == 假
		消息框("安装默认证书失败, 请尝试管理员身份运行.")
		返回 0

	app.事件_请求前(&请求前, 0, 0)
	app.事件_响应前(&响应前, 0, 0)
	FD_启动配置构建 配置构建
	配置构建.监听端口(8080)
	配置构建.解密SSL().监控所有连接() //支持链式调用
	配置构建.优化线程池()
	//配置构建.注册为系统代理()

	app.启用会话互斥体(真)
	如果 app.启动(配置构建.构建()) == 假
		消息框("启动 失败")
		返回 0
	
	调试输出("核心版本 ", app.版本文本())	
	调试输出("已启动: ", app.已启动())
	调试输出("为系统代理: ", app.为系统代理())

	调试输出("当前监听端口: ", app.代理_取监听端口())

	
	调试输出("启动成功")
	控制台暂停()
	app.关闭()//如果未执行关闭,可以进入系统设置关闭代理

	FD_卸载DLL()
	返回 0

函数 空类型 请求前(FD_会话& 会话, 空类型* 上下文1, 空类型* 上下文2)
	文本型 host = 会话.取主机()
	如果 文本_包含(host, "baidu") 
		文本型 url = 会话.取URL()
		文本型 path = 网址_取路径(url)
		调试输出("url ", url.取地址())
		如果 文本比较(会话.取请求方法(), "GET") == 0 &&  path.是否为空() 
			如果 文本_包含(url, "www.baidu.com") //缓冲响应, 后续在响应头添加或修改键值
				会话.置缓冲响应(真)
				会话.置标志("百度1", "")
				会话.置标志("搜索按钮", "233")
			否则 文本_包含(url, "image.baidu.com") // 302跳转到  https://pic.sogou.com/
				会话.创建响应对象并绕过服务器()
				//会话.置响应体文本("<!DOCTYPE html><html><head><title>Fiddler</title></head><body>Hello Fiddler<body></html>")
				会话.响应头().置值("Location", "https://pic.sogou.com/")
				会话.置响应代码(302)
			否则 文本_包含(url, "baike.baidu.com") 
				会话.置URL("www.163.com")
			否则 文本_包含(url, "tieba.baidu.com")
				会话.创建响应对象并绕过服务器()
				会话.置响应体文本("<!DOCTYPE html><html><head><title>Fiddler</title></head><body>Hello Fiddler<body></html>")
			否则 文本_包含(url, "haokan.baidu.com") //断开链接
				会话.中止()
	否则
		会话.忽略() //不再拦截
	

函数 空类型 响应前(FD_会话& 会话, 空类型* 上下文1, 空类型* 上下文2)
	//文本型 url = 会话.取完整URL()
	//文本型 host = 会话.取主机()
	如果 会话.标志().包含("百度1")
		FD_HTTP响应头 响应头 = 会话.响应头()
		响应头.置值("test", "233333")

		//会话.置响应体文本(文本替换(会话.取响应体文本(), "百度一下", 会话.取标志("搜索按钮")))
		会话.解码响应()
		会话.替换响应("百度一下", 会话.取标志("搜索按钮"))

函数 逻辑型 文本_包含(常量 字符型* 源, 常量 字符型* 文本)
	返回 文本查找(源, 文本) != NULL


函数 文本型 网址_取路径(常量 字符型* 源)
	常量 字符型* p = 文本查找(源, "/")
	如果 p
		如果 p[1] != '\0'
			返回 p + 1
	返回 ""













































	
	
		




	
